# 
# To change this template, choose Tools | Templates
# and open the template in the editor.
 
require 'pdf/writer'
require 'pdf/simpletable'

class ConvenioPdf
  
  def initialize(convenio_id)
    @pdf = PDF::Writer.new(:paper => 'LETTER')
    @convenio = Convenio.find(convenio_id)
    @pdf.select_font("Times-Roman", :encoding => 'WinAnsiEncoding')
    
  end
  
  def imprimir
    @participante = if @convenio.tipo_participante == Convenio::CENTRO_CONSUMO
      Centro.find(@convenio.participante_id)
    elsif @convenio.tipo_participante == Convenio::CORPORATIVO
      Corporativo.find(@convenio.participante_id)
    end
    
    imprimir_inicio
    
    imprimir_compromisos_cuervo
    
    imprimir_compromisos_cliente
    
    imprimir_cierre
    
    imprimir_firmas
    
    @pdf.render
  end

  def imprimir_inicio
    @image = "#{RAILS_ROOT}/public/images/logocuervo.jpg"
        
    @pdf.image @image, :justification => :center, :resize => 0.40
    @pdf.text "<b>CARTA CONVENIO</b>", :font_size => 18, 
      :justification => :center, :spacing => 1.5
    @pdf.text "\n"

    p "Carta Convenio que celebran por una parte <b>CASA CUERVO, S.A. DE C.V.</b>, a quien en lo sucesivo se le denominar\341 como <b>Casa Cuervo</b> y por la otra parte <b>#{@participante.razon_social}</b> en lo sucesivo se le denominar\341 <b>#{@participante.nombre_comercial}</b>, de conformidad con:"

    p1 "1. Es objeto de la presente Carta Convenio incrementar las ventas de <b>Casa Cuervo</b> y otorgar un valor agregado a los consumidores del establecimiento <b>#{@participante.nombre_comercial}</b>"    
    
  end

  def imprimir_compromisos_cuervo
    conditions = [
      "(destino = :destino_id) AND (porcentaje > 0)",
      {:destino_id => Bonificacion::ESPECIE}
    ]
    @bonificaciones_especie = @convenio.bonificaciones.find(:all, :conditions => conditions)
    @texto_bonificaciones_especie = String.new
    @bonificaciones_especie.each do |b_e|
      if b_e.marca_id.nil?
        @texto_bonificaciones_especie << "<b>#{b_e.porcentaje}%</b> en la Linea <b>#{Familia.find(b_e.familia_id).nombre}</b>,\040"        
      else
        @texto_bonificaciones_especie << "<b>#{b_e.porcentaje}%</b> en la marca <b>#{Marca.find(b_e.marca_id).nombre}</b>,\040"
      end
      
    end unless @bonificaciones_especie.blank?
    
    conditions = [
      "(destino = :destino_id) AND (porcentaje > 0)",
      {:destino_id => Bonificacion::BOLSA}
    ]
    @bonificaciones_bolsa = @convenio.bonificaciones.find(:all, :conditions => conditions)
    @texto_bonificaciones_bolsa = String.new
    @bonificaciones_bolsa.each do |b_b|
      if b_b.marca_id.nil?
        @texto_bonificaciones_bolsa << "<b>#{b_b.porcentaje}%</b> en la Linea <b>#{Familia.find(b_b.familia_id).nombre}</b>,\040"
      else
        @texto_bonificaciones_bolsa << "<b>#{b_b.porcentaje}%</b> en la marca <b>#{Marca.find(b_b.marca_id).nombre}</b>,"
        
      end
    end unless @bonificaciones_bolsa.blank?
    
    @compromisos_cuervo = @convenio.compromisos.find(:all, :conditions => {:responsable => Compromiso::CASA_CUERVO})

    p1 "2. Las partes convienen como compromisos de <b>Casa Cuervo</b>"

    unless @bonificaciones_especie.blank?
      p2 "a. Apoyo de bonificaci\363n en Especie del #{@texto_bonificaciones_especie} contra facturas de las compras a su distribuidor autorizado."
    end
    
    unless @bonificaciones_bolsa.blank?
      p2 "b. Apoyo de bonificaci\363n a Bolsa del #{@texto_bonificaciones_bolsa} contra facturas de las compras a su distribuidor autorizado; Dicha bonificaci\363n ser\341 acumulada en un fondo con el cual se pagaran materiales promocionales con la imagen de ambas partes (impresos, uniformes, publicidad, producci\363n, etc.). Dichos materiales se elaborar\341n con previa planeaci\363n y autorizaci\363n de ambas partes."
    end

    letter = "c"
    @compromisos_cuervo.each do |c|
      
      if c.importe.blank? || c.importe == 0
        numeral letter, c.descripcion
      else
        numeral letter, c.descripcion  << " con un importe de " + c.importe.to_s
      end
      
      letter.succ!
    end unless @compromisos_cuervo.blank?
    
  end
  
  def imprimir_compromisos_cliente
    @compromisos_cliente = @convenio.compromisos.find(:all, :conditions => {:responsable => Compromiso::CLIENTE})
    
    @objetivos_mensuales = String.new
    @convenio.objetivo_mensuales.each do |objetivo|
      if objetivo.marca_id.nil?
        @objetivos_mensuales << "<b>#{Familia.find(objetivo.familia_id).nombre}</b> (#{objetivo.objetivo_mensual} cajas 9lt.),\040" 
      else
        @objetivos_mensuales << "<b>#{Marca.find(objetivo.marca_id).nombre}</b> (#{objetivo.objetivo_mensual} cajas 9lt.),\040" 
      end
      
    end

    p1 "3. Las partes convienen como compromisos de <b>#{@participante.nombre_comercial}</b>"

    letter = "a"
    @compromisos_cliente.each do |c|
      numeral letter, c.descripcion
      letter.succ!
    end unless @compromisos_cliente.blank?

    unless (@convenio.objetivo_mensuales.size == 0)
      numeral letter, "Cumplir con el objetivo de ventas mensuales para las marcas de apoyo de <b>Casa Cuervo</b>: #{@objetivos_mensuales}"
    end
    
  end
  
  def imprimir_cierre
    p1 "4. Las partes acuerdan en que la presente Carta Convenio tendr\341 una vigencia a partir de #{@convenio.fecha_inicio.to_date} hasta #{@convenio.fecha_termino.to_date}, la cual podr\341 prorrogarse por periodos iguales si las partes as\355 lo manifiestan por escrito. Asimismo, las partes estan de acuerdo en que <b>Casa Cuervo</b> podr\341 dar por terminada la presente Carta Convenio en cualquier momento con un simple aviso dado por escrito a <b>#{@participante.nombre_comercial}</b> con 30 d\355as naturales de anticipaci\363n, respetando \372nicamente aquellos compromisos pendientes de llevar a cabo a la fecha de terminaci\363n."
  
    p1 "5. Las partes aceptan y reconocen que por ser 02 entidades distintas no existe ninguna relaci\363n laboral entre ellas y/o el personal de cada una de ellas, quedando obligadas las partes a cumplir todas sus obligaciones que correspondan por su relacion laboral con sus empleados, dependientes o terceros con los que contraten, de conformidad con lo establecido en el art\355culo 15 A de la Ley Federal del Trabajo e inclusive con las obligaciones de caracter social, tales como IMSS, INFONAVIT, SAR y SHCP."
  
    p1 "6. El incumplimiento de cualquiera de las 02 partes a cualquiera de los compromisos que contraen por la presente Carta Convenio, facultar\341 a la parte afectada para rescindir la misma, o bien, exigir su cumplimiento forzoso, quedando liberado de forma autom\341tica de las obligaciones que corran a su cargo, sin necesidad de resoluci\363n judicial alguna."
  
    p1 "7. Todo documento confidencial o no, que sea proporcionado entre las partes en relaci\363n a la presente Carta Convenio, es y ser\341 propiedad de cada una de ellas, y por lo tanto las partes se obligan a considerarlo como confidencial y a no divulgarlo a terceras personas, f\355sica o moral, ajenas a la presente Carta Convenio."
  
    p1 "8. Para todo lo relacionado con la presente Carta Convenio, las partes se\361alan como sus domicilios respectivos los siguientes:"
  
    p2 "a. <b>Casa Cuervo</b>: Avenida R\355o Churubusco No. 213, Colonia Granjas M\351xico, C\363digo Postal 0844, M\351xico, Distrito Federal."
    p2 "b. <b>#{@participante.nombre_comercial}</b>: #{@participante.domicilio}"
  
    p1 "Las notificaciones que practiquen las partes deberan realizarse en los domicilios arriba citados, ya que las que se efect\372en en lugares diversos, no surtir\341n efecto alguno. Cualquier cambio de los domicilios arriba citados debera notificarse a la contraparte por escrito, con 05 d\355as h\341biles de anticipaci\363n, de lo contrario las notificaciones que realicen en los domicilios antes mencionados se tendr\341n por v\341lidos para todos los efectos legales."
  
    p1 "9. Para la interpretaci\363n, ejecuci\363n y cumplimiento de la presente Carta Convenio las partes aceptan la aplicaci\363n del C\363digo Civil para el Distrito Federal y demas leyes aplicables en dicha entidad y se someten a la jurisdicci\363n y competencia de los tribunales de la Ciudad de M\351xico, Distrito Federal, renunciando a cualquier otro fuero que pudiera corresponderles por razon de sus domicilios presentes o futuros."
    
  end
  
  def imprimir_firmas
    
    fecha_dia = @convenio.fecha_inicio.mday
    fecha_firma = String.new
    fecha_firma << fecha_dia.to_s 
    fecha_firma << (fecha_dia == 1 ? ' dia': ' dias')
    fecha_firma << ' de ' << @convenio.fecha_inicio.strftime('%B') << ' de ' << @convenio.fecha_inicio.year.to_s
    
    p "Las partes enteradas del contenido de la presente Carta Convenio, reconocen que en la celebraci\363n del mismo no existi\363 dolo, error, mala fe o ning\372n otro vicio del consentimiento, por lo que la firman por triplicado en la ciudad de #{@participante.ciudad}, a los #{fecha_firma}."

    # imprimir tabla con datos para firma
    casa_cuervo = "Casa Cuervo"
    participante = "#{@participante.nombre_comercial}"
    ejecutivo_nombre = @convenio.ejecutivo.nombre_completo
    participante_nombre = @participante.nombre_contacto
    jefe_inmediato = Ejecutivo.find(@convenio.ejecutivo.reporta_a_id).nombre_completo unless @convenio.ejecutivo.reporta_a_id.nil?
    
    PDF::SimpleTable.new do |tab|
      tab.show_lines = :none
      tab.show_headings = false
      tab.column_order = [
        casa_cuervo, participante
      ]
      
      tab.columns[casa_cuervo] = PDF::SimpleTable::Column.new(casa_cuervo) do |col|
        col.justification = :center
      end
      
      tab.columns[participante] = PDF::SimpleTable::Column.new(participante) do |col|
        col.justification = :center
      end
      
      datum = [
        {casa_cuervo => "Casa Cuervo", participante => "#{@participante.nombre_comercial}"},
        {casa_cuervo => "Casa Cuervo, S.A. de C.V.", participante => "#{@participante.razon_social}"},
        {casa_cuervo => "\040", participante =>  "\040"},
        {casa_cuervo => ejecutivo_nombre, participante => participante_nombre}
      ]
      
      tab.data.replace datum
      
      tab.render_on(@pdf)
    end
    
    p "\040"
    
    PDF::SimpleTable.new do |tab_jefe|
      tab_jefe.show_lines = :none
      tab_jefe.show_headings = false
      tab_jefe.column_order = [
        "jefe"
      ]
      
      tab_jefe.columns["jefe"] = PDF::SimpleTable::Column.new("jefe") do |col|
        col.justification = :center
      end
      
      datum = [
        {"jefe" => "\040"},
        {"jefe" => "Casa Cuervo, S.A. de C.V."},
        {"jefe" => "\040"},
        {"jefe" => jefe_inmediato}
      ]
      
      tab_jefe.data.replace datum

      tab_jefe.render_on(@pdf)
    end
  end
  
  def p(texto)
    p_print(texto)
    
  end
  
  def p1(texto)
    p_print(texto, 1)
  end
  
  def p2(texto)
    p_print(texto, 2)
  end
  
  def p_print(texto, tab=0, tab_size=0.75)
    current_left_margin = @pdf.left_margin
    tab_factor = @pdf.left_margin * (tab_size * tab)
    @pdf.left_margin += tab_factor
    
    @pdf.font_size = 12
    @pdf.text texto, :justification => :full
    @pdf.text "\n"
    
    @pdf.left_margin = current_left_margin
    
  end
  
  def numeral(inciso, cuerpo)
    texto_imprimir = (inciso + ". " + cuerpo)

    p2 texto_imprimir
    
  end
end
